﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;
using System.Collections.ObjectModel;


namespace EntitiesLayer
{
  
  
    public class Ejercicio :IEntity
    {
        private int idEjercicio;

        public int Id
        {
            get { return idEjercicio; }
            set { idEjercicio = value; }
        }
        private string nombre;

        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        private string segundonombre;

        public string Segundonombre
        {
            get { return segundonombre; }
            set { segundonombre = value; }
        }


        private string posInicial;

        public string PosInicial
        {
            get { return posInicial; }
            set { posInicial = value; }
        }
        private string posFinal;

        public string PosFinal
        {
            get { return posFinal; }
            set { posFinal = value; }
        }
        private string indicaciones;

        public string Indicaciones
        {
            get { return indicaciones; }
            set { indicaciones = value; }
        }

        private string errores;

        public string Errores
        {
            get { return errores; }
            set { errores = value; }
        }

        private Lazy<IList<Musculos>> musculosPrimarios;

        public IList<Musculos> MusculosPrimarios
        {
            get { return musculosPrimarios.NullSaveValue(); }
        }

        private Lazy<IList<Musculos>> musculosSecundarios;

        public IList<Musculos> MusculosSecundarios
        {
            get { return musculosSecundarios.NullSaveValue(); }
        }

        private Lazy<IList<TipoMaquina>> listaMaquinas;

        public IList<TipoMaquina> ListaTMaquinas
        {
            get { return listaMaquinas.NullSaveValue(); }
        }

        /*
        private Lazy<IList<Video>> listaVideos;

        public IList<Video> ListaVideos
        {
            get { return chequearLazy(listaVideos); }
        }
        */
        private Lazy<IList<Imagen>> listaImagenes;

        public IList<Imagen> ListaImagenes
        {
            get { return listaImagenes.NullSaveValue(); }
        }

        public Ejercicio(string pnombre, string pnombre2, 
            string pposini, string pposfin, string pindicaciones, 
            string perrores,  int pid=0, 
            Lazy<IList<Musculos>> musculosPrimarios=null, 
            Lazy<IList<Musculos>> musculosSecundarios=null, 
            Lazy<IList<Maquina>> listaMaquinas=null, 
            Lazy<IList<Imagen>> listaImagenes=null ,
            Lazy<IList<Video>> listaVideos=null ) {

            Id = pid;
            Nombre = pnombre;
            Segundonombre = pnombre2;
            PosInicial = pposini;
            PosFinal = pposfin;
            Indicaciones = pindicaciones;
            Errores = perrores;
            this.musculosPrimarios = musculosPrimarios;
            this.musculosSecundarios = musculosSecundarios;
            this.listaImagenes = listaImagenes;
            
                
        }
        /// <summary>
        /// Elemento para tener type safety con un id. 
        /// Primordialmente se va a utilizar para eliminar
        /// </summary>
        /// <param name="pid"></param>
        public Ejercicio(int pid)
            : this("Anonimo", "Anonimo",
                "...", "...", "...",
                "...", pid) { }


    
    }
}
